package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @version 1.0
 * @description 部门控制层: 接收请求，调用service，返回数据
 * @package com.itheima.controller
 */
//@RestController// 标记这是一个控制层
public class DeptController2 {

    @Autowired
    private DeptService deptService;

    /**
     * RequestMapping中的method指定接收请求的方式
     *
     * @return
     */
    //@RequestMapping(value = "/depts",method = RequestMethod.POST) // 接收请求
    //@RequestMapping(value = "/depts") // 接收请求
    @GetMapping("/depts")
    public Result list(){
        // 调用业务层
        List<Dept> deptList = deptService.findAll();
        // 返回数据
        return Result.success(deptList);
    }

    /**
     * 通过id删除部门
     * http://localhost:8080/depts?id=10
     * RequestParam中的value属性必须与请求参数名一致
     *   required默认为true,参数是必传，如果没传则报错400
     *   defaultValue默认值， 分页查询默认查询第一页，每页10条记录
     * 如果不使用@RequestParam，则方法的形参名要与请求中的参数名一致 【推荐】
     * @param id
     * @return
     *
     * DeleteMapping = RequestMapping(method=RequestMethod.DELETE)
     */
    @DeleteMapping("/depts")
    //public Result deleteById(@RequestParam(value = "id",required = false,defaultValue = "10") Integer deptId){
    public Result deleteById(Integer id){
        System.out.println("deptId = " + id);
        // 调用业务层删除
        deptService.deleteById(id);
        return Result.success();
    }

    /**
     * 新增部门
     * 接收前端传json数据格式，@RequestBody，在方法的形参里有且只有一个，且类型为实体类或LinkedHashMap<String,Object>
     * @param dept
     * @return
     */
    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        System.out.println("dept = " + dept);
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 通过id查询部门信息
     * 参数是从路径中来的，路径中的变量
     * @param id
     * @return
     */
    @GetMapping("/depts/{id}")
    public Result getById(@PathVariable Integer id){
        System.out.println("id = " + id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    /**
     * 修改部门
     * @param dept
     * @return
     */
    @PutMapping("/depts")
    public Result update(@RequestBody Dept dept){
        System.out.println("dept = " + dept);
        deptService.update(dept);
        return Result.success();
    }

}
